/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package com.ipartek.formacion.gestformwww.modelo.clases;

import com.ipartek.formacion.gestformwww.modelo.beans.AlumCurso;
import com.ipartek.formacion.gestformwww.modelo.beans.excepciones.GestorFormacionExcepcion;
import com.ipartek.formacion.gestformwww.modelo.interfaces.IAlumCursoDAO;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ResourceBundle;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 * @author Sara y Alvaro
 */
public class SQLServerAlumCursoDAO implements IAlumCursoDAO{
   
    private static ResourceBundle rb;
    

   public SQLServerAlumCursoDAO(){
        rb = ResourceBundle.getBundle("com.ipartek.formacion.gestformwww.controlador.excepciones");
    }

    /**
     * Método que crea la asistencia de un alumno.
     * @author: Sara y Alvaro
     * @param rs: Contiene los datos del nuevo SMSEnvio.
     * @return devuelve asistencia de la clase Asistencia
     */
    private AlumCurso crearAlumCurso(ResultSet rs) throws SQLException {
        AlumCurso alumCurso = new AlumCurso();
        alumCurso.setPracticas(rs.getBoolean("Practicas"));
        alumCurso.setValFinal(rs.getFloat("ValFinal"));
        alumCurso.setAluId(rs.getInt("AluId"));
        alumCurso.setCurId(rs.getInt("CurId"));
        alumCurso.setTerminado(rs.getBoolean("Terminado"));
        alumCurso.setFchUltiCla(rs.getTimestamp("FchUltiCla"));
        alumCurso.setReserva(rs.getBoolean("Reserva"));
        alumCurso.setOrden(rs.getInt("Orden"));
        alumCurso.setAvisos(rs.getString("Avisos"));
        alumCurso.setObservaciones(rs.getString("Observaciones"));

        return alumCurso;
    }

    /**
     * Método que busca las relaciones entre un alumno y un curso.
     * @author
     * @param idAlumno: identificador del alumno
     * @param idCurso: identificador del curso
     * @return devuelve las relaciones entre el alumno y curso elegidos
     */
    public AlumCurso buscarAlumCurso(int idAlumno, int idCurso) throws GestorFormacionExcepcion {
        AlumCurso alumCurso = new AlumCurso();
        Connection con;

        try {
            con = SQLServerDAOFactory.conecta();
        } catch (SQLException ex) {
            Logger.getLogger(SQLServerAlumCursoDAO.class.getName()).log(Level.SEVERE, null, ex);
            throw new GestorFormacionExcepcion(rb.getString("no-conexion"));
        }
        
        try{
            PreparedStatement stmt = con.prepareStatement("SELECT Practicas, ValFinal, AluId, CurId, Terminado, FchUltiCla, Reserva, Orden, Avisos, Observaciones FROM alumcurso WHERE AluId=? AND CurId=?");
            stmt.setInt(1, idAlumno);
            stmt.setInt(2, idCurso);
            ResultSet rs = stmt.executeQuery();
            if (rs.next()) {
                alumCurso = crearAlumCurso(rs);
            }
        }catch(SQLException ex){
            Logger.getLogger(SQLServerAlumCursoDAO.class.getName()).log(Level.SEVERE, null, ex);
            throw new GestorFormacionExcepcion(rb.getString("no-sql"));
        }finally{
            SQLServerDAOFactory.desconecta(con);
            return alumCurso;
        }
    }
/**
     * Método que modifica la información de un alumno en un curso.
     * @author
     * @param Objeto AlumCurso
     * @return void
     */
    /**
     * Método que actualiza la informacion de un alumno en un curso.
     * @Aitor y Xarles
     * @param Recibe un alumcurso de tipo AlumCurso.
     * @return No devuelve nada.
     */

    public void modificarInfoCurso(AlumCurso alumcurso) throws GestorFormacionExcepcion{
        Connection con=null;

        try {
            con = SQLServerDAOFactory.conecta();
        } catch (SQLException ex) {
            Logger.getLogger(SQLServerAlumCursoDAO.class.getName()).log(Level.SEVERE, null, ex);
            throw new GestorFormacionExcepcion(rb.getString("no-conexion"));
        }
        try{
            PreparedStatement stmt = null;
            stmt=con.prepareStatement("UPDATE AlumCurso SET Practicas=?, ValFinal=?, Terminado=?, FchUltiCla=?, Reserva=?, Orden=?, Avisos=?, Observaciones=? WHERE AluId="+alumcurso.getAluId()+" AND CurId="+alumcurso.getCurId());
            stmt.setBoolean(1,alumcurso.isPracticas());
            stmt.setFloat(2,alumcurso.getValFinal());
            stmt.setBoolean(3,alumcurso.isTerminado());
            stmt.setTimestamp(4,alumcurso.getFchUltiCla());
            stmt.setBoolean(5,alumcurso.isReserva());
            stmt.setInt(6,alumcurso.getOrden());
            stmt.setString(7, alumcurso.getAvisos());
            stmt.setString(8,alumcurso.getObservaciones());
            //stmt.setInt(9,alumcurso.getAluId());
            //stmt.setInt(10,alumcurso.getCurId());
            stmt.executeUpdate();
            stmt.close();

        } catch (SQLException ex) {
            Logger.getLogger(SQLServerAlumCursoDAO.class.getName()).log(Level.SEVERE, null, ex);
            throw new GestorFormacionExcepcion(rb.getString("no-sql"));
        } finally {
            SQLServerDAOFactory.desconecta(con);
        }

    }
}